package newsSystem.Inner.Login;

import newsSystem.Inner.MainPage;
import newsSystem.Inner.Register.RegisterPage;
import newsSystem.dao.UserInfoJDBC;
import newsSystem.img.ImagePanel;
import newsSystem.layout.UserLayOutPage;
import newsSystem.user.UserInfo;
import newsSystem.user.UserManager;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class UserLoginPage {
    private JTextField username;
    private JPasswordField password;
    private static java.util.List<UserInfo> UserList;
   public UserLoginPage(){
       JFrame frame = new JFrame("报刊订阅管理系统");
       frame.setSize(900, 650);
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setLayout(null);//设置空布局，组件想怎么放怎么放
       frame.setLocationRelativeTo(null); // 居中显示

       // 创建一个 JPanel 作为内容面板
//       JPanel contentPane = new JPanel();
       // 加载背景图像
       ImageIcon backgroundImageIcon = new ImageIcon("E:\\Java\\NewsSub_Manage_System\\src\\main\\java\\newsSystem\\img\\bgc2.jpg");
       Image backgroundImage = backgroundImageIcon.getImage();

       // 创建一个 ImagePanel，并设置背景图像
       ImagePanel contentPane = new ImagePanel(backgroundImage);
//        contentPane.setBackground(Color.CYAN); // 设置背景颜色为天蓝色
       // 设置内容面板的布局管理器
       contentPane.setLayout(null); // 设置布局管理器为null

//        欢迎面板
       JPanel welpanel=new JPanel(new BorderLayout());
       welpanel.setBounds(150,70,600,100);
       welpanel.setOpaque(false);
//       welpanel.setBackground(Color.CYAN);
       JLabel welcomeLabel = new JLabel("报刊订阅用户登录");
       // 设置字体大小为 36
       Font font = welcomeLabel.getFont();
       Font newFont = font.deriveFont(Font.BOLD, 45f);
       // 设置文字颜色为白色
       welcomeLabel.setForeground(Color.WHITE);
       welcomeLabel.setFont(newFont);
//        welcomeLabel.setBorder(new LineBorder(Color.YELLOW));
       // 添加文字到中心
       welcomeLabel.setHorizontalAlignment(SwingConstants.CENTER); // 文本水平居中
       welpanel.add(welcomeLabel,BorderLayout.CENTER);

       //按钮面板
       JPanel LoginPanel = new JPanel(); // 使用 FlowLayout 布局管理器new FlowLayout()
       LoginPanel.setOpaque(false);//设置为透明
       LoginPanel.setLayout(null); // 禁用布局管理器
       LoginPanel.setBounds(300,200,320,180);
//        LoginPanel.setBackground(Color.CYAN);
       LoginPanel.setBorder(BorderFactory.createLineBorder(Color.GRAY));

//用户登录框
       JLabel userLabel = new JLabel("Username:");
       userLabel.setFont(new Font("宋体", Font.PLAIN, 18));
       userLabel.setBounds(20, 20, 100, 30); // 设置位置和大小
       JTextField username = new JTextField(10);
       username.setFont(new Font("宋体", Font.PLAIN, 18));
       username.setBounds(120, 20, 140, 30); // 设置位置和大小

       // 创建密码标签和密码框
       JLabel passwdLabel = new JLabel("Password:");
       passwdLabel.setFont(new Font("宋体", Font.PLAIN, 18));
       passwdLabel.setBounds(20, 60, 100, 30); // 设置位置和大小
       JPasswordField password = new JPasswordField(10);
       password.setFont(new Font("宋体", Font.PLAIN, 18));
       password.setBounds(120, 60, 140, 30); // 设置位置和大小

//       创建确认和返回按钮框
       JButton okbutton = new JButton("确定");
       JButton returnbttton = new JButton("返回");
       okbutton.setBounds(70,130,70,30);
       returnbttton.setBounds(180,130,70,30);
       okbutton.setContentAreaFilled(false);
       returnbttton.setContentAreaFilled(false);
       okbutton.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {

               String inputUsername = username.getText();
               char[] inputPasswordChars = password.getPassword();
               String inputPassword = new String(inputPasswordChars);
               System.out.println(inputPassword);
               System.out.println(inputUsername);

               // 首先检查用户名和密码是否为空
               if (inputUsername.isEmpty() || inputPassword.isEmpty()) {
                   JOptionPane.showMessageDialog(null, "用户名或密码不能为空！", "错误", JOptionPane.ERROR_MESSAGE);
                   return;
               }

            //        调用UserJDBC方法
               try {
                   UserInfoJDBC.UserJDBC();
               } catch (Exception ex) {
                   throw new RuntimeException(ex);
               }
               UserList = UserManager.getUserList();
               boolean loggedIn = false;
               boolean loggedInn = false;
               for (UserInfo user : UserList) {
//                   System.out.println("用户ID: " + user.getUserID()   + ", 用户密码: " + user.getUserPWD() + ", 用户名: " + user.getUserName() + ", 用户性别: " + user.getUserSex() + ", 身份证号: " + user.getIDCard()+ ", 电话号码: " + user.getPhone() + ", 地址: " + user.getAddress());
                   if(user.getUserID().equals(inputUsername) ){
                       loggedInn=true;
                       if (user.getUserID().equals(inputUsername) && user.getUserPWD().equals(inputPassword)) {
                       loggedIn = true;
                       break;
                     }
                   }

               }
               if(loggedInn) {
                   if (loggedIn) {
                       JOptionPane.showMessageDialog(null, "登录成功！");
                       // 在这里编写跳转到用户注册页面的逻辑
                       System.out.println("确定");
                       UserLayOutPage userPage = new UserLayOutPage(inputUsername);
                       frame.setVisible(false);
//                   userPage.setVisible(true);
                   }else{
                       JOptionPane.showMessageDialog(null, "密码不正确！请重新输入！");
                   }
               }else {
                   // 提示用户注册
                   int choice = JOptionPane.showConfirmDialog(null,
                           "不存在当前用户\n是否需要注册新账户？",
                           "登录失败",
                           JOptionPane.YES_NO_OPTION,
                           JOptionPane.QUESTION_MESSAGE);

                   if (choice == JOptionPane.YES_OPTION) {
                       // 在这里执行用户注册的相关操作
                       // 比如打开注册界面或者执行注册逻辑
                       // 这里只是简单提示，实际注册逻辑需要根据具体需求编写
                       JOptionPane.showMessageDialog(null, "请先注册新账户！");
                       new RegisterPage();
                       frame.setVisible(false);
                   }
               }
           }
       });
       returnbttton.addActionListener(new ActionListener() {
           @Override
           public void actionPerformed(ActionEvent e) {
               // 在这里编写跳转到用户注册页面的逻辑
               System.out.println("返回");
//                JOptionPane.showMessageDialog(null, "跳转到用户注册页面");
               frame.setVisible(false);
               new MainPage();
           }
       });
       LoginPanel.add(okbutton);
       LoginPanel.add(returnbttton);
       LoginPanel.add(userLabel);
       LoginPanel.add(username);
       LoginPanel.add(passwdLabel);
       LoginPanel.add(password);

       // 将内容面板设置为 JFrame 的内容面板
       contentPane.add(LoginPanel);
       contentPane.add(welpanel);
       frame.setContentPane(contentPane); // 将内容面板设置为窗体的内容面板

       frame.setVisible(true);

   }

    public static void main(String[] args) {
//        箭头函数
        SwingUtilities.invokeLater(() -> {
         new   UserLoginPage();
        });
    }
}